import router from './router'
import { ElMessage, ElMessageBox } from 'element-plus'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { isHttp, isPathMatch } from '@/utils/validate'
// import { isRelogin } from '@/utils/request'
// import useUserStore from '@/store/modules/user'
// import useSettingsStore from '@/store/modules/settings'
// import usePermissionStore from '@/store/modules/permission'
import { useUserInfoStore } from '@/stores/userInfo'
import getPageTitle from './utils/get-page-title'
import axios from 'axios'
NProgress.configure({ showSpinner: false })

const whiteList = ['/login', `/packingMaterials`, `/blanking`, `/craft`, `/outsource`, `/sewingMachine`, `/particulars`]

const isWhiteList = (path) => {
  return whiteList.some((pattern) => isPathMatch(pattern, path))
}

router.beforeEach(async (to, from, next) => {
  // 在显示进度条
  NProgress.start()

  // 设置整个页面的标题
  document.title = getPageTitle(to.meta.title)
  const token = sessionStorage.getItem('Authorization')
  // 如果token存在(已经登陆或前面登陆过)
  if (token) {
    // 如果请求的是登陆路由
    if (to.path === '/login') {
      // 直接跳转到根路由, 并完成进度条
      next({ path: '/index' })
      NProgress.done()
    } else if (to.path === '/selectSystem') {
      next()
      NProgress.done()
    } else if (useUserInfoStore().roles.length !== 0) {
      next()
      NProgress.done()
    } else {
      // 如果还没有登陆
      try {
        // 异步请求获取用户信息(包含权限数据) ==> 动态注册用户的权限路由 => 当次跳转不可见
        const routers = await useUserInfoStore().getInfo()
        next({ ...to, replace: true })
        // next() // 重新跳转去目标路由, 能看到动态添加的异步路由, 且不会丢失参数
        NProgress.done() // 结束进度条
      } catch (error) {
        // 如果请求处理过程中出错
        // 跳转到登陆页面, 并携带原本要跳转的路由路径, 用于登陆成功后跳转
        next('/login')
        // 完成进度条
        NProgress.done()
      }
    }
  } else {
    // 没有token
    // 如果目标路径在白名单中(是不需要token的路径)
    if (whiteList.indexOf(to.path) !== -1) {
      // 放行
      next()
    } else {
      // 如果没在白名单中, 跳转到登陆路由携带原目标路径
      next('/login')
      // 完成进度条  当次跳转中断了, 要进行一个新的跳转了
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  NProgress.done()
})
